#pragma once

class Zobrist {
private:
	long long random[20][20][3] = { 0 };

	Zobrist();

	long long rand_ll();

public:
	static Zobrist * getIns();

	long long hash(const Board & board);

	long long position(int x, int y, int k);
	long long position(int pos, int k);

	long long update(const Board & board, long long original, int x, int y, int newval);
	long long update(const Board & board, long long original, int pos, int newval);
};